package com.atguigu.spzx.common.exception;

import com.atguigu.spzx.model.vo.common.Result;
import com.atguigu.spzx.model.vo.common.ResultCodeEnum;
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

// RestControllerAdvice：使用了AOP 对 它所在的容器中的 Controller/RestController进行代理
// 当Controller/RestController接口出现异常时，RestControllerAdvice可以根据异常类型匹配异常处理器处理
@RestControllerAdvice
@Slf4j
//@Log
public class GuiguExceptionHandler {
    //创建一个Exception类型的异常的处理器
    @ExceptionHandler(value = Exception.class)
    public Result<Object> exception(Exception e){
        log.error(ExceptionUtils.getStackTrace(e));
//        log.
        System.out.println(e.getMessage());
        return Result.build(ResultCodeEnum.UNKNOW_ERROR , null);
    }
    //自定义类型异常的处理器
    @ExceptionHandler(value = GuiguException.class)
    public Result<Object> exception(GuiguException e){
        log.error(ExceptionUtils.getStackTrace(e));
        return Result.build(e.getCode(), e.getMessage(), null);
    }
}
